<?php
/* 
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
*/

/**
 * Description of AutorDAO
 *
 * @author cshepherd
 */
class AutorDAO extends DAO {    
    public function select($fields='*', $condition='TRUE', $page='1', $rows_per_page='20', $order_by='id_autor', $order_by_type='DESC') {
        $list_autor = array();
        $data_autor = array();
        try {
            $rows = 0;
            $start = intval(($page-1)*$rows_per_page);
            $query = "SELECT COUNT(id_autor) AS rows FROM autor";
            $query .= " WHERE ".$condition;
            $stmt = $this->dbh->query($query);
            $rows = $stmt->fetchObject()->rows;
            $query = 'SELECT '. $fields .' FROM autor';
            $query .= ' WHERE '.$condition.' ';
            $pages = ceil($rows/$rows_per_page);
            $query .= 'ORDER BY '.$order_by;
            $query .= ' '.$order_by_type;
            $stmt->closeCursor();
            $query .= ' LIMIT '.$start." , ".$rows_per_page;
            //echo $query;
            /*
            $query .= 'ORDER BY :order_by';
            $query .= ' :order_by_type ';
            $query .= 'LIMIT :start, :rows_per_page';
            $stmt->closeCursor();*/
            //echo $query;
            $stmt = $this->dbh->prepare($query);
            /*$stmt->bindParam(':start', $start, PDO::PARAM_INT);
            $stmt->bindParam(':rows_per_page', $rows_per_page, PDO::PARAM_INT);
            $stmt->bindParam(':order_by', $order_by);
            $stmt->bindParam(':order_by_type', $order_by_type);*/
            $stmt->setFetchMode(PDO::FETCH_OBJ);
            $stmt->execute();
            $result = $stmt->fetchAll();
            foreach($result as $row) {
                $objAutorTO = new AutorTO();
                $objAutorTO->setIdAutor($row->id_autor);
                $objAutorTO->setNombre($row->nombre);
                $objAutorTO->setApellido($row->apellido);
                $objAutorTO->setEmail1($row->email_1);
                $objAutorTO->setEmail2($row->email_2);
                $objAutorTO->setInstitucion($row->institucion);
                $objAutorTO->setTelefono($row->telefono);
                $objAutorTO->setCargo($row->cargo);
                $objAutorTO->setIdSec($row->id_sec);
                $objAutorTO->setIdPais($row->id_pais);
                $list_autor[count($list_autor)+1] = $objAutorTO;
            }
            $data_autor['list_autor']=$list_autor;
            $data_autor['pages']=$pages;
            $data_autor['rows']=$rows;

            return $data_autor;

        }catch(Exception $e) {
            throw $e;
        }
    }

    protected function insert($Entidad) {
        try {
            $nombre = $Entidad->getNombre();
            $apellido = $Entidad->getApellido();
            $email_1 = $Entidad->getEmail1();
            $email_2 = $Entidad->getEmail2();
            $institucion = $Entidad->getInstitucion();
            $telefono = $Entidad->getTelefono();
            $cargo = $Entidad->getCargo();
            $id_sec = $Entidad->getIdSec();
            $id_pais = $Entidad->getIdPais();
            //$id_cuenta = $Entidad->getIdCuenta();
            $query = 'INSERT INTO autor (nombre, apellido, email_1, email_2, institucion, telefono, cargo, id_sec, id_pais) ';
            $query .= 'VALUES(:nombre, :apellido, :email_1, :email_2, :institucion, :telefono, :cargo, :id_sec ,:id_pais)';
            $stmt = $this->dbh->prepare($query);
            $stmt->bindParam(':nombre', $nombre);
            $stmt->bindParam(':apellido', $apellido);
            $stmt->bindParam(':email_1', $email_1);
            $stmt->bindParam(':email_2', $email_2);
            $stmt->bindParam(':institucion', $institucion);
            $stmt->bindParam(':telefono', $telefono);
            $stmt->bindParam(':cargo', $cargo);
            $stmt->bindParam(':id_sec', $id_sec);
            $stmt->bindParam(':id_pais', $id_pais);
            //$stmt->bindParam(':id_cuenta', $id_cuenta);
            $stmt->setFetchMode(PDO::FETCH_OBJ);
            if($stmt->execute()) {
                return $this->dbh->lastInsertId();
            }
            else {
                return FALSE;
            }
        }
        catch(Exception $e) {
            throw $e;
        }
    }

    public function load($objAutorTO) {
        try {
            $query = 'SELECT * FROM autor WHERE id_sec = :id_sec LIMIT 1';
            $stmt = $this->dbh->prepare($query);
            $stmt->bindParam(':id_sec', $objAutorTO->getIdSec());
            $stmt->setFetchMode(PDO::FETCH_OBJ);
            $stmt->execute();
            $resultado = $stmt->fetch();
            $objAutorTO->setIdAutor($resultado->id_autor);
            return $objAutorTO;
        }
        catch(Exception $e) {
            throw $e;
        }
    }

    public function loadId($objAutorTO) {
        try {
            $query = 'SELECT * FROM autor WHERE id_autor = :id_autor LIMIT 1';
            $stmt = $this->dbh->prepare($query);
            $stmt->bindParam(':id_autor', $objAutorTO->getIdAutor());
            $stmt->setFetchMode(PDO::FETCH_OBJ);
            $stmt->execute();
            $resultado = $stmt->fetch();
            $objAutorTO->setNombre($resultado->nombre);
            $objAutorTO->setApellido($resultado->apellido);
            return $objAutorTO;
        }
        catch(Exception $e) {
            throw $e;
        }
    }

    public function delete($id) {
        return "";
    }

    protected function update($objetoTO) {
        return "";
    }
}
?>
